package com.jcw.controller;

import java.util.Date;

import org.joda.time.DateTime;
import org.joda.time.Days;
import org.joda.time.format.DateTimeFormat;

public class DateUtils4DX2 {
	
	//formats 
	private static String simpleDateFormatStr = "yyyy-MM-dd HH:mm:ss";
	private static String longFormatStr = "yyyyMMddHHmmss";
	private static String longdateFormatStr = "yyyyMMdd";
	private static String yearMonthFormatStr = "yyyyMM";
	private static String shortFormatStr = "yyyy-MM-dd";
	private static String hmsDateFormatStr = "HHmmss";
	private static String shortMDFormatStr = "MM-dd HH:mm";
	private static String lSimpleDateFormatStr = "yyyy-MM-dd HH:mm:ss,SSS";
	
	
	

	/**
	 * @return 
	 *
	 * <p>Author: liangjing
	 * <p>Version: 1.0
	 * <p>Time: 2015年6月16日 上午10:56:00
	 * <p>Description:获取时间，格式为yyyyMMddHHmmss
	 * 
	 */
	public static String getLongDate() {
		DateTime dt = new DateTime();
		return dt.toString(longFormatStr);
	}

	/**
	 * @return 
	 *
	 * <p>Author: liangjing
	 * <p>Version: 1.0
	 * <p>Time: 2015年6月16日 上午11:00:30
	 * <p>Description:获取日期，格式为YYYYMMDD
	 * 
	 */
	public static String getLongDateFormat() {
		DateTime dt = new DateTime();
		return dt.toString(longdateFormatStr);
	}

	/**
	 * @return 
	 *
	 * <p>Author: liangjing
	 * <p>Version: 1.0
	 * <p>Time: 2015年6月16日 上午11:04:47
	 * <p>Description:获取昨天日期，格式为YYYYMMDD
	 * 
	 */
	public static String getLastDateFormat() {
		DateTime dt = new DateTime().minusDays(1);
		return dt.toString(longdateFormatStr); 
	}

	/**
	 * @return 
	 *
	 * <p>Author: liangjing
	 * <p>Version: 1.0
	 * <p>Time: 2015年6月16日 上午11:05:18
	 * <p>Description:获取年月，格式为YYYYMM
	 * 
	 */
	public static String getYearMonth() {
		DateTime dt = new DateTime();
		return dt.toString(yearMonthFormatStr);
	}

	
	/**
	 * @return yyyy-MM-dd HH:mm:ss
	 *
	 * <p>Author: liangjing
	 * <p>Version: 1.0
	 * <p>Time: 2015年6月16日 上午11:05:52
	 * <p>Description:获取当前时间，格式为yyyy-MM-dd HH:mm:ss
	 * 
	 */
	public static String getDate() {
		DateTime dt = new DateTime();
		return dt.toString(simpleDateFormatStr);
	}

	/**
	 * @return HH:mm:ss
	 *
	 * <p>Author: liangjing
	 * <p>Version: 1.0
	 * <p>Time: 2015年6月16日 上午11:07:03
	 * <p>Description:获取当前时间，格式为HH:mm:ss
	 * 
	 */
	public static String gethmsDate() {
		DateTime dt = new DateTime();
		return dt.toString(hmsDateFormatStr);
	}


	/**
	 * @return yyyy-MM-dd
	 *
	 * <p>Author: liangjing
	 * <p>Version: 1.0
	 * <p>Time: 2015年6月16日 上午11:11:09
	 * <p>Description:获取年月日，格式为yyyy-MM-dd
	 * 
	 */
	public static String getShortDate() {
		DateTime dt = new DateTime();
		return dt.toString(shortFormatStr);
	}

	
	/**
	 * @param date yyyy-MM-dd HH:mm:ss
	 * @return yyyyMMddHHmmss
	 *
	 * <p>Author: liangjing
	 * <p>Version: 1.0
	 * <p>Time: 2015年6月16日 上午11:13:49
	 * <p>Description:格式化为yyyyMMddHHmmss
	 * 
	 */
	public static String getLongDate(String date) {
		try {
			DateTime dt = DateTimeFormat.forPattern(simpleDateFormatStr).parseDateTime(date); 
			return dt.toString(longFormatStr);
		} catch (Exception e) {
		}
		return null;
	}
	
	/**
	 * @param date yyyy-MM-dd HH:mm:ss
	 * @return MM-dd HH:mm
	 *
	 * <p>Author: liangjing
	 * <p>Version: 1.0
	 * <p>Time: 2015年6月16日 上午11:15:51
	 * <p>Description:格式化为MM-dd HH:mm
	 * 
	 */
	public static String getMonthAndDay(String date) {
		try {
			DateTime dt = DateTimeFormat.forPattern(simpleDateFormatStr).parseDateTime(date);
			return dt.toString(shortMDFormatStr);
		} catch (Exception e) {
		}
		return null;
	}

	
	/**
	 * @return yyyy-MM-dd 00:00:00
	 *
	 * <p>Author: liangjing
	 * <p>Version: 1.0
	 * <p>Time: 2015年6月16日 上午11:19:30
	 * <p>Description:获取今天00:00:00，格式为yyyy-MM-dd 00:00:00
	 * 
	 */
	public static String getToday() {
		DateTime dt = new DateTime();
		return dt.toString(shortFormatStr) + " 00:00:00";
	}

	/**
	 * @return yyyy-MM-dd 23:59:59
	 *
	 * <p>Author: liangjing
	 * <p>Version: 1.0
	 * <p>Time: 2015年6月16日 上午11:19:30
	 * <p>Description:获取今天23:59:59，格式为yyyy-MM-dd 23:59:59
	 * 
	 */
	public static String getTodayLast() {
		DateTime dt = new DateTime();
		return dt.toString(shortFormatStr) + " 23:59:59";
	}
	

	/**
	 * 获取当前月份的倒数第二天
	 * 
	 * @return
	 */
	public static String getLastSecondOfMonth() {
		DateTime dt = new DateTime().plusMonths(1).dayOfMonth().setCopy(1).minusDays(2);
		return dt.toString(longdateFormatStr);
	}
	

	/**
	 * @return yyyyMMdd
	 *
	 * <p>Author: liangjing
	 * <p>Version: 1.0
	 * <p>Time: 2015年6月16日 上午11:23:21
	 * <p>Description:获取当前月份的最后一天，格式为yyyyMMdd
	 * 
	 */
	public static String getLastOfMonth() {
		DateTime dt = new DateTime().plusMonths(1).dayOfMonth().setCopy(1).minusDays(1);
		return dt.toString(longdateFormatStr);
	}
	
	/**
	 * @return yyyyMMdd
	 *
	 * <p>Author: liangjing
	 * <p>Version: 1.0
	 * <p>Time: 2015年6月16日 上午11:23:21
	 * <p>Description:获取当前月份的倒数第二天，格式为yyyyMMdd
	 * 
	 */
	public static String getLastSecondDay() {
		DateTime dt = new DateTime().plusMonths(1).dayOfMonth().setCopy(1).minusDays(2);
		return Integer.toString(dt.getDayOfMonth());
	}

	/**
	 * @return 
	 *
	 * <p>Author: liangjing
	 * <p>Version: 1.0
	 * <p>Time: 2015年6月16日 上午11:22:17
	 * <p>Description:获取当前月份
	 * 
	 */
	public static String getMonth() {
		DateTime dt = new DateTime();
		return Integer.toString(dt.getMonthOfYear());
	}

	/**
	 * @return 
	 *
	 * <p>Author: liangjing
	 * <p>Version: 1.0
	 * <p>Time: 2015年6月16日 上午11:22:36
	 * <p>Description:计算现在到明天间隔时间，单位秒
	 * 
	 */
	public static int getNowTOTomorrow() {
		DateTime dt = DateTimeFormat.forPattern(simpleDateFormatStr).parseDateTime(getTodayLast());
		return (int)((dt.getMillis() - System.currentTimeMillis()) / 1000);
	}
	
	/**
	 * @param date yyyyMMdd
	 * @return 
	 *
	 * <p>Author: liangjing
	 * <p>Version: 1.0
	 * <p>Time: 2015年6月15日 下午5:27:12
	 * <p>Description:判断是否是日期yyyyMMdd
	 * 
	 */
	public static boolean isDate(String date) {
		try {
			DateTimeFormat.forPattern(longdateFormatStr).parseDateTime(date);
			return true;
		} catch (Exception e) {
			return false;
		}

	}
	
	/**
	 * @param s yyyyMM
	 * @return yyyyMM
	 *
	 * <p>Author: liangjing
	 * <p>Version: 1.0
	 * <p>Time: 2015年6月16日 上午8:21:08
	 * <p>Description:获取下个月，格式为yyyyMM
	 * 
	 */
	public static String getNextMonth(String s) {
		String str = "";
		try {
			DateTime dt = DateTimeFormat.forPattern(yearMonthFormatStr).parseDateTime(s)
					.plusMonths(1);
			str = dt.toString(yearMonthFormatStr);
		} catch (Exception e) {
			 e.printStackTrace();
		}
		return str;
	}
	
	/**
	 * @param s yyyyMM
	 * @return yyyyMM
	 *
	 * <p>Author: liangjing
	 * <p>Version: 1.0
	 * <p>Time: 2015年6月16日 上午8:31:51
	 * <p>Description:获取上个月，格式为yyyyMM
	 * 
	 */
	public static String getPreMonth(String s) {
		String str = "";
		try {
			DateTime dt = DateTimeFormat.forPattern(yearMonthFormatStr).parseDateTime(s).minusMonths(1);
			str = dt.toString(yearMonthFormatStr);
		} catch (Exception e) {
			 e.printStackTrace();
		}
		return str;
	}
	
	
	/**
	 * @param begindate yyyyMMdd
	 * @param enddate yyyyMMdd
	 * @return 
	 *
	 * <p>Author: liangjing
	 * <p>Version: 1.0
	 * <p>Time: 2015年6月16日 上午9:03:29
	 * <p>Description:计算两个日期间隔的天数   
	 * 
	 */
	public static int getIntervalDays(String begindate, String enddate) {
		int days = 0;
		try {
			DateTime dt1 = DateTimeFormat.forPattern(longdateFormatStr)
					.parseDateTime(begindate);
			DateTime dt2 = DateTimeFormat.forPattern(longdateFormatStr)
					.parseDateTime(enddate);
			days = Days.daysBetween(dt1, dt2).getDays();
		} catch (Exception e) {
			e.printStackTrace();
		}   
		return days;
	}
	
	
	/**
	 * @param date
	 * @return 
	 *
	 * <p>Author: liangjing
	 * <p>Version: 1.0
	 * <p>Time: 2015年6月16日 上午9:18:33
	 * <p>Description:格式化日期为：yyyy-MM-dd格式
	 * 
	 */
	public static String formatDateToShort(Date date) {
		if (date == null) {
			return "";
		}
		DateTime dt = new DateTime(date);
		return dt.toString(shortFormatStr);
	}
	
	/**
	 * 今日发布稿件时间显示“今日”，昨天发布的稿件时间显示“昨日”，其它时间发布的稿件显示发布日期，显示格式为“yyyy-mm-dd”，例如“2015-04-13”
	 * @param dateTime yyyy-MM-dd HH:mm:ss
	 * @return 
	 *
	 * <p>Author: yangzhongping
	 * <p>Version: 1.0
	 * <p>Time: 2015年6月11日 下午3:14:17
	 * <p>Description:  
	 *
	 */
	public static String formatDateToView(String dateTime){
		if(dateTime==null || "".equals(dateTime.trim())){
			return "";
		}
		String dateStr = dateTime.split(" ")[0];
		DateTime dt = new DateTime();
		String today = dt.toString(shortFormatStr);
		String yestoday = dt.minusDays(1).toString(shortFormatStr);
		if(today.equals(dateStr)){
			return "今日";
		}else if(yestoday.equals(dateStr)){
			return "昨日";
		}
		else{
			return dateStr;
		}
	}
	
	
	
	/**
	 * 1）距离当前时间1小时内，显示“{多少}分钟前”；2）距离当前时间大于1小时，小于24小时，显示“{多少}小时前”；3）超出24小时，显示日期，格式为“yyyy-mm-dd”
	 * @param dateTime yyyy-MM-dd HH:mm:ss
	 * @return 
	 *
	 * <p>Author: yangzhongping
	 * <p>Version: 1.0
	 * <p>Time: 2015年6月11日 下午3:14:50
	 * <p>Description:
	 *
	 */
	public static String formatDateToView2(String dateTime){
		if(dateTime==null || "".equals(dateTime.trim())){
    		return "";
    	}
		
		DateTime dt = null;
		int time = 0;
		try {
			dt = DateTimeFormat.forPattern(simpleDateFormatStr).parseDateTime(dateTime);
			time = (int)((System.currentTimeMillis() - dt.getMillis()) / 1000);
		} catch (Exception e) {
			e.printStackTrace();
			return "";
		}
    	
        if (time < 60) {
            return "刚刚";
        } else if (time < 3600) {
            return (int)(time / 60) + " 分钟前";
        } else if (time < 86400) {
            return (int)(time / 3600) + " 小时前";
        } else{
            return dateTime.split(" ")[0];
        }
    }
	
	/**
	 * @param l
	 * @return yyyy-MM-dd HH:mm:ss,SSS
	 *
	 * <p>Author: liangjing
	 * <p>Version: 1.0
	 * <p>Time: 2015年6月16日 上午11:24:30
	 * <p>Description:获取毫秒，格式为yyyy-MM-dd HH:mm:ss,SSS
	 * 
	 */
	public static String getLongSimpleDate(long l) {
		int m = (int)l;
		DateTime dt = new DateTime(1970, 1, 1, 8, 00, 00, m);
		return dt.toString(lSimpleDateFormatStr);
	}

	public static void main(String[] args) {
		
		//String AGENT_GZJ = "13529069955,13888772972";
		
		//String[] s = AGENT_GZJ.split(",");
		//int s = Integer.parseInt(DateUtils.gethmsDate().substring(0,4));
		//System.out.println(Math.ceil(2.0));
		//StringBuffer s = new StringBuffer("20120808000000100");
		//s.insert(4, "-").insert(7, "-").insert(10, " ").insert(13, ":").insert(16, ":").insert(19, " ");
		//System.out.println(s.toString());
		DateTime dt = DateTimeFormat.forPattern(simpleDateFormatStr).parseDateTime(getTodayLast());
		Long m = dt.getMillis();
		String str = "201506";		
		String result = getPreMonth(str);
		String str1 = formatDateToView("2015-06-16 10:38:49");
		int i = getIntervalDays("20120909","20130909");
		System.out.println(result);
		System.out.println(str1);
		System.out.println(i);
		System.out.println(isDate(str));
	}
}

